#ifndef __APP_CONFIG_H__
#define __APP_CONFIG_H__

/******************************************************************************/
#define NETWORK_MODULE_NONE (0)     // 无网络模块
#define NETWORK_MODULE_4G   (1)     // 网络模块 4G cat1 A7680C
#define NETWORK_MODULE_NB   (2)     // 网络模块 NB-Iot  Y7025
/******************************************************************************/



#define TCFG_DEBUG_UART_BURDRATE            (115200ul)      // 打印串口波特率
#define TCFG_APP_AT_COMMAND_SUPPORT         (1) // 应用AT命令支持

#define TCFG_DRV_IRNEC_SUPPORT              (1) // IR NEC解码支持
#define TCFG_DRV_ENCODER_SUPPORT            (1) // 旋转编码器支持
#define TCFG_DRV_KEY_SUPPORT                (1) // 按键支持
#define TCFG_DRV_IOKEY_SUPPORT              (1) // GPIO按键支持
#define TCFG_DRV_ADKEY_SUPPORT              (1) // ADC按键支持
#define TCFG_DRV_IOUART_SUPPORT             (0) // IO模拟解码串口
#define TCFG_DRV_COMPARE_SUPPORT            (1) // 内置比较器支持
#define TCFG_DRV_INA219_SUPPORT             (1) // INA219 电压电流检测模块I2C接口
#define TCFG_DRV_INA3221_SUPPORT            (0) // INA3221电压电流检测模块I2C接口
#define TCFG_DRV_ADC_UV_SENSOR_SUPOORT      (0) /* ADC类型紫外线强度传感器 */
#define TCFG_DRV_ADC_LT_SENSOR_SUPPORT      (0) /* ADC类型光照强度传感器 */
#define TCFG_DRV_ADC_NTC_SENSOR_SUPPORT     (0) /* ADC类型NTC温度传感器 */
#define TCFG_DRV_ADC_VOL_SENSOR_SUPPORT     (0) /* ADC类型电阻分压法电压检测 */
#define TCFG_DRV_LCD_SPI_SUPPORT            (1) /* LCD SPI */
#define TCFG_DRV_SD_CARD_SPI_SUPPORT        (0) /* SPI模式SD卡读写支持 */
#define TCFG_DRV_SPI_NORFLASH_SUPPORT       (1) /* SPI NorFlash */

#define TCFG_LIB_FATFS_SUPPORT              (0) /* FatFs 文件系统支持 */
#define TCFG_LIB_cJSON_SUPPORT              (0) /* 未验证！！*/


#define TCFG_CFG_WDT_ENABLE                 (0) /* 看门狗 */


// TODO: 网络模块相关配置参数
#define TCFG_NETWORK_MODULE_TYPE            NETWORK_MODULE_NONE   /* 网络模块类型配置 */
#define TCFG_SYNCTIME_BY_MODULE             (1)    /* 基站授时 0：禁止，1：使能 */
#define TCFG_REPORT_INTERVAL_MS             (6*1000)    /* 气体浓度数值上报周期 *

/* TODO: 网络模块配置 4G/NB */
#if TCFG_NETWORK_MODULE_TYPE == NETWORK_MODULE_4G
#define TCFG_SLEEP_NETWORK_ATCMD_WEAIT_EN   (0)         /* 1: 进入SLEEP模式前网络模块发送并等待AT关机指令 */
#define TCFG_REST_LOW_TIME_S                (2500)      // 模块复位REST脚拉低时间 
#define TCFG_NETWORK_AT_BAUDRATE            (115200)    /* 4G 模块AT串口波特率*/
#define TCFG_ATCMD_SEND_INTERVAL_MIN_MS     (100)       /* AT命令发送 最小间隔 单位毫秒 */
#define TCFG_ATCMD_SENDTASK_PERIOD_MS       (200)       /* AT命令发送任务执行周期，即两条AT命令发送间隔最小时间。*/
#define TCFG_ATCMD_RECV_FRAME_MS            (10)         /* AT串口接收到一个字节数据延时多长时间没收到数据，认为一帧数据接收完成 */
#define TCFG_MQTT_ERROR_RECONNECT_CNT       (5)         /* MQTT数据发送多失败多少次 模块复位重新连接MQTT服务 */
#define TCFG_RSSI_MAX_VALUE                 (31)        /* RSSI 最大信号取值 */
#define TCFG_RSSI_GOOD_VALUE                (3)         /* RSSI 保证网络正常使用的最小值 */
#define TCFG_RSSI_LOSS_VALUE                (1)         /* RSSI 可能导致网络出错的最大值 */
#elif TCFG_NETWORK_MODULE_TYPE == NETWORK_MODULE_NB
#define TCFG_SLEEP_NETWORK_ATCMD_WEAIT_EN   (0)         /* 1: 进入SLEEP模式前网络模块发送并等待AT关机指令 */
#define TCFG_REST_LOW_TIME_S                (20*1000)   // 模块复位REST脚拉低时间       
#define TCFG_NETWORK_AT_BAUDRATE            (9600)      /* NB-Iot模块AT串口波特率*/
#define TCFG_ATCMD_SEND_INTERVAL_MIN_MS     (1000)      /* AT命令发送 最小间隔 单位毫秒 */
#define TCFG_ATCMD_SENDTASK_PERIOD_MS       (200)       /* AT命令发送任务执行周期，即两条AT命令发送间隔最小时间。 */
#define TCFG_ATCMD_RECV_FRAME_MS            (10)        /* AT串口接收到一个字节数据延时多长时间没收到数据，认为一帧数据接收完成 */
#define TCFG_MQTT_ERROR_RECONNECT_CNT       (5)         /* MQTT数据发送多失败多少次 模块复位重新连接MQTT服务 */
#define TCFG_RSSI_MAX_VALUE                 (31)        /* RSSI 最大信号取值 */
#define TCFG_RSSI_GOOD_VALUE                (3)         /* RSSI 保证网络正常使用的最小值 */
#define TCFG_RSSI_LOSS_VALUE                (1)         /* RSSI 可能导致网络出错的最大值 */
#define TCFG_MQTT_TIMEOUT_MS                (5000)      /* MQTT操作超时时间 */
#define TCFG_MQTT_KEEPALIVE_S               (1000)        /* MQTT保持连接间隔，10~65535 单位秒，在该时间间隔内会主动发送MQTT包活报文，设置太小会导致频繁发包 */
#define TCFG_MQTT_BUFFSIZE                  (512)       /* 建议范围20-1000 根据发送大小设置，太大浪费内存，太小可能报8002错误 */
#endif


// TODO: MQTT连接相关参数
#define TCFG_MQTT_4G_HOST_STR       ("tcp://899qc0.cn1.mqtt.chat:1883")     /* MQTT Host for 4G Cat.1 */
#define TCFG_MQTT_NB_HOST_STR       ("899qc0.cn1.mqtt.chat")    /* MQTT host for NB-iot */ 
#define TCFG_MQTT_PORT_STR          ("1883")
#define TCFG_MQTT_CLIENTID_STR      ("864423065869610@899qc0")  // MQTT ClientID
#define TCFG_MQTT_USERNAME_STR      ("mqtt_test")   // MQTT user
#define TCFG_MQTT_PASSWORD_STR      ("YWMtuNFs4krvEe-MGLUVGd655vyi57-RF0zDuSu5Kx63bkFuZtjweFUR7KZVFc4Fstk3AwMAAAGQ7LBDlgWP1ACpP0ejnCnMCHEXaV9uyLptock0pFGPKsdeZDwk0ol3Iw")  // MQTT password
#define TCFG_MQTT_SUBTOPIC_STR      ("topic_cat1_server")       // 订阅Topic
#define TCFG_MQTT_PUBTOPIC_STR      ("topic_cat1_device")       // 发布Topic
#define TCFG_MQTT_CON_QOS           (1) /* MQTT 遗属qos: 0, 1, 2 */
#define TCFG_MQTT_PUB_QOS           (1) /* MQTT 发布qos: 0, 1, 2 */
#define TCFG_MQTT_SUB_QOS           (1) /* MQTT 订阅qos: 0, 1, 2 */



#define LCD_ENABLE		(TCFG_DRV_LCD_SPI_SUPPORT) // 1:支持LCD，0：不支持LCD
#if (LCD_ENABLE)
/* LCM 显示屏驱动IC型号定义 */
#define LCD_MODULE_GC9306	        (9306) // GC9306 LCM  RGB565 240x320
#define LCD_MODULE_GC9307	        (9307) // GC9307 LCM  RGB565 240x320
#define LCD_MODULE_ST7735S          (7735) // ST7735S/ST7789S LCM
#define LCD_MODULE_ST7571           (7571) // ST7571  124x128 2bit 4灰阶点阵屏 2.3寸灰阶屏
#define LCD_MODULE_ST7567           (7567) // ST7567  LCM(单色点阵屏 128x64)    识字宝
#define LCD_MODULE_UC1705X	        (1705) // UC1705X LCM(单色点阵屏 128x64)    EQ精灵
#define LCD_MODULE_SSD1309          (1309) // SSD1309 LCM(单色点阵屏 128x64)    
#define LCD_MODULE_UC1611S          (1611) // UC1611S 单色240x160 点阵屏


// #define LCD_PANLE_MODULE        LCD_MODULE_ST7567 // 识字宝
// #define LCD_PANLE_MODULE        (LCD_MODULE_UC1705X) // EQ精灵 128x64 点阵屏
// #define LCD_PANLE_MODULE        (LCD_MODULE_ST7571) // 2.3寸  128x128 点阵灰阶屏
#define LCD_PANLE_MODULE        (LCD_MODULE_UC1611S) // 204x160 单色点阵屏


#if ( (LCD_PANLE_MODULE == LCD_MODULE_UC1705X)||(LCD_PANLE_MODULE==LCD_MODULE_ST7567) )
#define LCD_WIDTH  128
#define LCD_HEIGH  64
#define LCD_BITS_PERPIXEL       (1)   /* 16:RGB565, 1:单色 */
#define LCD_PANLE_INVERSION_ON  (0)   /* 打开反色功能 */
#elif ( (LCD_PANLE_MODULE == LCD_MODULE_UC1611S) )
#define LCD_WIDTH  240
#define LCD_HEIGH  160
#define LCD_BITS_PERPIXEL       (1)   /* 16:RGB565, 1:单色 */
#define LCD_PANLE_INVERSION_ON  (0)   /* 打开反色功能 */
#elif ( (LCD_PANLE_MODULE == LCD_MODULE_GC9306)||(LCD_PANLE_MODULE==LCD_MODULE_GC9307) )
#define LCD_WIDTH  320
#define LCD_HEIGH  240
#define LCD_BITS_PERPIXEL       (16)   /* 16:RGB565, 1:单色 */
#endif

#endif //LCD_ENABLE


// TODO: 字体配置相关
#define TCFG_FONT_NORFLASH_DATA_ENABLE      (1)     /* 汉字库使用NORFLASH字库数据 */
#if TCFG_FONT_NORFLASH_DATA_ENABLE
#define TCFG_FONT_LIBRARY_TYPE              (1)     /* 1:UNICODE编码字库, 2:GBK编码字库 */
#endif

/* 以下是数组字库 */
#define TCFG_FONT_SIZE_ASCII_8X16_ENABLE    (0)     // ASCII  8X16字符支持
#define TCFG_FONT_SIZE_ASCII_16X24_ENABLE   (0)     // ASCII 16X24字符支持
#define TCFG_FONT_SIZE_HZK_16X16_ENABLE     (0)     // 汉字库16x16字体支持
#define TCFG_FONT_SIZE_HZK_16X24_ENABLE     (0)     // 汉字库16x24字体支持
#define TCFG_FONT_SIZE_HZK_24X24_ENABLE     (0)     // 汉字库24x24字体支持
#define TCFG_FONT_SIZE_HZK_32X32_ENABLE     (0)     // 汉字库32x32字体支持


#endif
